package com.oracle.Aspect;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * MyAspect定义的是一个切面类，
 * 在该类中添加扩展方法
 */
public class MyAspect {
    /**
     * before方法就是一个增强方法，用来增强UserDAO的saveUser方法
     */
     public void before(){
        System.out.println("userDAO_save的方法准备执行...");
    }

    /**
     * afterReturn方法是一个后置返回通知，在UserDAO的saveUser方法执行之后执行
     *    必须实在saveUser方法没有产生任何异常的情况下。
     */
    public void afterReturn(){
        System.out.println("userDAO_save的方法执行结束,并且没有产生任何异常...");

    }

    /**
     * afterThrowing方法是一个异常通知，在UserDAO的saveUser方法产生异常的情况下
     * 才会执行。
     */
    public void afterThrowing(){
        System.out.println("userDAO_save的方法产生异常...");
    }

    /**
     * after方法是一个最终通知，在UserDAO的saveUser方法执行之后执行，不管saveUser
     * 方法中是否产生异常after方法都会被执行。
     */
    public void after(){
        System.out.println("userDAO_save的方法执行完成_最终通知...");
    }

    /**
     * around方法是一个环绕通知，在UserDAO的saveUser方法执行之前和之后都会执行。
     * @param proceedingJoinPoint
     */
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("UserDAO_saveUser的方法开始执行了...");
        //调用被增强的方法
        proceedingJoinPoint.proceed();
        System.out.println("UserDAO_saveUser的方法执行结束了...");

    }
}
